export function openStorage(handler: DocumentStorageHandler, forceLoadFromDom = false): void { var storage = new RuntimeDocumentStorage(handler, forceLoadFromDom);
interface ExecuteSqlDelegate { callback: (transaction: SQLTransaction, result: SQLResultSet) => void,
errorCallback: (transaction: SQLTransaction, resultSet: SQLError) => void): void;
class RuntimeDocumentStorage implements DocumentStorage { document: typeof document = null;
_metadataElement: HTMLScriptElement = null;
private _metadataProperties: any = null;
private _docByPath: { [name: string]: RuntimeDocumentState; } = {}; private _executeSql: ExecuteSqlDelegate = null;
private _insertMetadataSql = '';
private _updateMetadataSql = '';
_savingCache = new FileSavingCache();
savingFiles = this._savingCache.savingFiles;
public handler: DocumentStorageHandler,
forceLoadFromDom: boolean) { this.document = this.handler.document ? this.handler.document : document;
var pathElements = this._scanDomScripts();
if (!this._metadataElement) { this._metadataElement = appendScriptElement(this.document);
this._metadataElement.id = 'storageMetadata';
var openDatabase = this.handler.openDatabase || getOpenDatabase();
if (typeof openDatabase === 'function') { var dbName = this.handler.uniqueKey ? this.handler.uniqueKey : getUniqueKey();
var db = openDatabase(dbName, 1, null, 1024 * 1024 * 5);
callback: (transaction: SQLTransaction, result: SQLResultSet) => void,
errorCallback: (transaction: SQLTransaction, error: SQLError) => void) => { var errorCallbackSafe = (t: SQLTransaction, e: SQLError) => { alert(e + ' ' + e.message + '\n' + sqlStatement + '\n' + args);
db.transaction((t) => t.executeSql(sqlStatement, args, callback, errorCallbackSafe));
this._insertMetadataSql = 'INSERT INTO "*metadata" (name, value) VALUES(?,?)';
this._updateMetadataSql = 'UPDATE "*metadata" SET value=? WHERE name=?';
this._metadataProperties = {}; this._loadTableListFromWebsql((tableList) => { var metadataTableExists = false;
for (var i = 0; i < tableList.length; i++) { if (tableList[i] === '*metadata') { metadataTableExists = true;